Prévenir par email d'une connexion SSH

Sommaire

Ajout de la notification au démarrage avec PAM

Insérer une entrée dans pam.d/sshd

Créer firewall-ssh.sh

SSMTP : Envoyer des emails

En cas d’erreur

Impossible d’envoyer à une adresse gmail avec sendmail

alerte email quand une connexion ssh est réussie avec le fichier /etc/ssh/sshrc

Modifiez ou créez /etc/ssh/sshrc

Alternative contenu /etc/ssh/sshrc

 

Si vous souhaitez recevoir un mail dès que vous avez une connexion, voici un script qui vous sera bien utile. Avant de copier ce code assurez vous que vous pouvez envoyer des mails et que vous avez configuré correctement sSMTP et sendmail.

Vous pouvez tester votre configuration avec le code ci-dessous, vous devriez recevoir un email à votre@email sous une dizaine de secondes :

    printf %b "    __|__   \n -----o----- \n$(date -R)" | sendmail votre@email

Ajout de la notification au démarrage avec PAM

Tout se passe en privilège root.

Insérer une entrée dans pam.d/sshd

Dans le fichier /etc/pam.d/sshd rajoutez la ligne :

session    optional     pam_exec.so /usr/bin/firewall-ssh.sh

Vous n’avez pas besoin de reload, le changement se fait automatiquement.

Créer firewall-ssh.sh

Donc on crée le fichier : /usr/bin/firewall-ssh.sh avec les permissions suivantes -rwxr-xr-x soit :

chmod 755 firewall-ssh.sh

ls -l firewall-ssh.sh

-rwxr-xr-x 1 root root 887 févr.  2 22:26 firewall-ssh.sh

Pour le contenu vous aurez besoin de changer votre@email. Voici le contenu du fichier :

#!/bin/sh

 

dest=votre@email

 

#################################################################################

############################# Alerte connexion SSH. #############################

#################################################################################

 

user=${PAM_USER:-$USER}

vpshost=$(hostname -f)

 

if [ ! "$PAM_TYPE" = "open_session" ]; then

  heure=$(/bin/date +"%T %A %d %B %Y")

  printf "Subject: $PAM_TYPE for $user@$vpshost\n\n$heure" | /usr/sbin/sendmail $dest

  exit 0

fi

 

printf %b "Subject: Notification de connexion SSH à votre VPS

From: $user <$user@$vpshost>

Date: $(/bin/date -R)

To: $dest

 

Bonjour,

 

Un utilisateur vient de se connecter en SSH à votre VPS.

 

\t Utilisateur          : $user@$vpshost

\t Ip de connexion      : $PAM_RHOST

\t Heure de connexion   : $(/bin/date +"%T %A %d %B %Y")

 

Cordialement,

 

Firewall SSH - Approuvé par un avion" | /usr/sbin/sendmail -f "$user@$vpshost" $dest

SSMTP : Envoyer des emails

Commençons par mettre à jour toutes les applications : apt-get update && apt-get upgrade.

Pour pouvoir envoyer des emails installez SSMTP avec : apt-get install ssmtp. Si vous cherchez sur un moteur de recherche, vous trouverez tout de suite les informations appropriées à votre adresse email par exemple : ssmtp gmail.

Modifions la configuration vim /etc/ssmtp/ssmtp.conf.

Par exemple, pour activer le TLS, utilisez UseSTARTTLS et UseTLS, vous devriez obtenir :

AuthUser=a@gmail.com

AuthPass=airbus

mailhub=smtp.gmail.com:587

 

UseTLS=YES

UseSTARTTLS=YES

FromLineOverride=YES

Pour un email chez OVH, on remplace la première ligne avec mailhub=ssl0.ovh.net:465 (comme indiqué sur la documentation.

N’oubliez pas de relancer sendmail avec : service sendmail reload pour qu’il prenne en compte votre nouvelle configuration.

Vous pouvez tester votre configuration avec le code ci-dessous, vous devriez recevoir un email à votre@email sous une dizaine de secondes :

    printf %b "    __|__   \n -----o----- \n$(date -R)" | sendmail votre@email

En cas de soucis, vous pouvez avoir besoin de modifier hostname (voir la commande hostname) avec l’ip ou nom de domaine approprié.

En cas d’erreur

Allez vérifier vos logs : tail -f /var/log/mail.log.

Impossible d’envoyer à une adresse gmail avec sendmail

Selon cette article vous devez ajouter à la fin du fichier /etc/mail/sendmail.mc :

CLIENT_OPTIONS(`Family=inet6,Addr=::ffff:127.0.0.1')dnl

Puis faire la commande (et répondre Y à toutes les questions) :

sendmailconfig

NB : Si vous utilisez votre propre nom de domaine, pensez à vérifier votre DNS et votre entrée SPF pour prévenir d’erreur silencieuse (présente dans tail -f /var/log/mail.log).

alerte email quand une connexion ssh est réussie avec le fichier /etc/ssh/sshrc

Attention: selon les commentaires, cela ne fonctionnera pas si l'utilisateur crée un fichier nommé ~/.ssh/rc. *

Modifiez ou créez /etc/ssh/sshrc

avec le contenu suivant:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

 

logger -t ssh-wrapper $USER login from $ip

echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <from@address.com>" -t "Your Name <your.email@domain.com>" -s smtp.server.com &

Cela vous avertira par courrier électronique chaque fois que quelqu'un se connectera via SSH, et le login sera enregistré dans le syslog.

Remarque: vous aurez besoin du sendemailpackage ( sudo apt-get install sendemail) pour que la notification par courrier électronique fonctionne.

Remarque: fonctionne avec la redirection de port, mais pas avec l'option -N.

Alternative contenu /etc/ssh/sshrc

DESTINATAIRE="destinataire@exemple.eu"

VPHOST=$(hostname -f)

DATE=$(date "+%d.%m.%Y--%Hh%Mm")

IP=$(echo $SSH_CONNECTION | awk '{print $1}')

#IP=`echo $SSH_CONNECTION | cut -d " " -f 1`

LOCALISATION=$(curl -s ipinfo.io/"$IP" | jq -r '[.country, .city] | join(", ")')

REVERSE=$(dig -x $IP +short)

echo "Connexion de ${USER} sur $VPHOST

IP de connexion: ${IP}

Localisation appelant: ${LOCALISATION}

ReverseDNS: ${REVERSE}

Date: ${DATE}

" | mail -s "Connexion de ${USER} sur $VPHOST" $DESTINATAIRE